package iteratorbind.base;

import java.util.Iterator;

/**
 * 菜单树节点抽象类
 * 菜单组件
 * @author yaojianfeng
 */
public abstract class BaseMenuComponent {
    /**
     * 我们把"组合"方法组织在一起
     * 即新增 删除 和取得菜单组件
     */
    public void add(BaseMenuComponent component){
        throw new UnsupportedOperationException();
    }
    public void remove(BaseMenuComponent component){
        throw new UnsupportedOperationException();
    }
    public BaseMenuComponent getChild(int i){
        throw new UnsupportedOperationException();
    }


    /**
     * 下面这四个是"操作"方法:它们被菜单项使用
     * 其中有一些也可用在菜单上
     */
    public String getName(){
        throw new UnsupportedOperationException();
    }
    public String getDescription(){
        throw new UnsupportedOperationException();
    }
    public double getPrice(){
        throw new UnsupportedOperationException();
    }
    public boolean isVegetarian(){
        throw new UnsupportedOperationException();
    }

    /**
     * print()是一个"操作"方法,这个方法同时被菜单和菜单项所实现
     * 但是我们在这里还是提供了默认的实现
     */
    public void print(){
        throw new UnsupportedOperationException();
    }

    /**
     * 获取迭代器
     * 子类需要实现这个方法
     * 这意味着对一个组合调用该方法 将会应用于该组合的所有节点
     * @return 迭代器
     */
    public abstract Iterator getIterator();

    @Override
    public String toString(){
        throw new UnsupportedOperationException();
    }
}
